<?php

namespace Nece\Sdk\Coze\Api;

use Nece\Sdk\Coze\ApiAbstract;

/**
 * 变量
 *
 * @author gjw
 * @created 2025-04-23 15:26:17
 */
class Variables extends ApiAbstract
{
    /**
     * 设置用户变量的值
     *
     * @author gjw
     * @created 2025-08-05 13:45:55
     *
     * @param array $data 用户变量的数组，不能为空。KV 结构。
     * @param string $connector_uid 用户 ID，用于为指定的用户设置变量的值。用户 ID 对应执行工作流 API 中 ext 字段指定的 user_id 或发起对话 API 中的 user_id。
     * @param string $app_id 如果需要为应用设置用户变量的值时，填入对应的应用ID。
     * @param string $bot_id 需要为智能体设置用户设置变量的值时，填入对应的智能体 ID。
     * @param string $connector_id 智能体或应用的发布渠道 ID 列表。
     * @return array
     */
    public function setVariables(array $data, string $connector_uid, string $app_id = '', string $bot_id = '', string $connector_id = '')
    {
        $api = '/v1/variables';

        // 处理结构
        $items = array();
        foreach ($data as $k => $v) {
            $items[] = array(
                'keyword' => $k,
                'value' => $v
            );
        }

        $params = array(
            'connector_uid' => $connector_uid,
            'data' => $items,
        );
        if ($app_id) {
            $params['app_id'] = $app_id;
        }
        if ($bot_id) {
            $params['bot_id'] = $bot_id;
        }
        if ($connector_id) {
            $params['connector_id'] = $connector_id;
        }

        return $this->post($api, $params, [], 'PUT');
    }

    /**
     * 获取用户变量的值
     *
     * @author gjw
     * @created 2025-04-23 15:29:27
     *
     * @param string $connector_uid 查看指定用户 ID 的变量值。用户 ID 对应执行工作流 API 中 ext 字段中的 user_id。
     * @param string $app_id 如果需要获取应用中设置的用户变量的值，填入对应的应用ID。
     * @param string $bot_id 如果需要获取智能体中设置的用户变量的值，填入对应的应用ID。
     * @param string $connector_id 智能体或应用的发布渠道 ID 列表。
     * @param array $keywords 变量名称，多个变量用英文逗号分隔。
     * @return array
     */
    public function getVariables(string $connector_uid = '', string $app_id = '', string $bot_id = '', string $connector_id, array $keywords = [])
    {
        $api = '/v1/variables';
        $query = array();
        if ($connector_uid) {
            $query['connector_uid'] = $connector_uid;
        }
        if ($app_id) {
            $query['app_id'] = $app_id;
        }
        if ($bot_id) {
            $query['bot_id'] = $bot_id;
        }
        if ($connector_id) {
            $query['connector_id'] = $connector_id;
        }
        if ($keywords) {
            $query['keywords'] = $keywords;
        }

        return $this->get($api, $query);
    }
}
